/**
 * 
 */
package view;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTextField;

import verwaltung.Model;

/**
 * Tastatur fuer saemtliche Eingaben
 * 
 * Ueber eine Methode wird der Controller, Name und alter Wert uebertragen
 * 
 * @date 04.01.2012
 * @author rs
 * @version 1.0
 * 
 */
public class Tastatur extends JDialog implements ActionListener {

	private Model model;

	private JPanel pnlGrund;
	private JPanel pnlTastatur;
	
	private JTextField txtEingabe;

	private JButton[] btnBuchstaben = new JButton[41];

	private String[] abc = { "Q", "W", "E", "R", "T", "Z", "7", "8", "9", "U",
			"I", "O", "P", "A", "S", "4", "5", "6", "D", "F", "G", "H", "J",
			"K", "1", "2", "3", "L", "Y", "X", "C", "V", "B", "-", "0", ".",
			"N", "M", " ", "DEL", "OK" };

	private String oldValue;

	private StringBuilder eingabe;
	
	private Font fontTasten = new Font(Font.SANS_SERIF, Font.BOLD, 26);

	/**
	 * Konstruktor
	 * 
	 * @param ziel
	 * @param oldValue
	 */
	public Tastatur(Model model, String oldValue) {
		super();

		this.model = model;

		this.oldValue = oldValue;

		if (oldValue == null) {
			this.eingabe = new StringBuilder("");
		} else {
			this.eingabe = new StringBuilder(this.oldValue);
		}
		
		this.setModal(true);

		initWidgets();

		addWidgets();

		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}

	private void initWidgets() {

		pnlGrund = new JPanel(new BorderLayout(5, 5));

		pnlTastatur = new JPanel(new GridLayout(5, 9, 3, 3));

		txtEingabe = new JTextField(eingabe.toString());
		txtEingabe.setFont(fontTasten);
		
		for (int i = 0; i < btnBuchstaben.length; i++) {
			btnBuchstaben[i] = new JButton(abc[i]);
			btnBuchstaben[i].setFont(fontTasten);

			btnBuchstaben[i].addActionListener(this);
		}
	}

	private void addWidgets() {
		// zaehler fuer Buttons
		int j = 0;

		// Darstellung tastatur optimieren
		for (int i = 0; j < btnBuchstaben.length; i++) {
			switch (i) {
			case 6:
			case 16:
			case 26:
			case 36:
			case 42:
			case 43:
			case 44:
			//case 45:
			case 46:
			case 47:
				pnlTastatur.add(Box.createHorizontalGlue());
				break;

			default:
				pnlTastatur.add(btnBuchstaben[j++]);
				break;
			}
		}

		pnlGrund.add(BorderLayout.NORTH, txtEingabe);
		pnlGrund.add(BorderLayout.CENTER, pnlTastatur);

		add(pnlGrund);
	}

	/**
	 * 
	 * @param event
	 */
	public void actionPerformed(ActionEvent event) {
		for (int i = 0; i < btnBuchstaben.length; i++) {
			// Button abfragen
			if (event.getSource() == btnBuchstaben[i]) {
				if (abc[i].equals("DEL") || abc[i].equals("OK")) {

					// Letzte eingabe loeschen
					if (abc[i].equals("DEL") && eingabe.length() > 0) {
						eingabe.deleteCharAt(eingabe.length() - 1);
					}
					// schliessen
					if (abc[i].equals("OK")) {
						
						model.setTastatur(eingabe.toString());
						txtEingabe.setText(eingabe.toString());
						
						// Werte speichern
						model.setTastaturOK();

						// ID Tastatur leeren
						model.setTastaturID("");

						setVisible(false);
						dispose();
					}

				} else {
					eingabe.insert(eingabe.length(), abc[i]);
					
					txtEingabe.setText(eingabe.toString());
				}
				model.setTastatur(eingabe.toString());
				
				txtEingabe.setText(eingabe.toString());
			}
		}
	}
}
